# 设置CMake最低版本要求
cmake_minimum_required(VERSION 3.10)

# 定义项目信息
project(MyEmbeddedProject 
    VERSION 1.0.0          # 项目版本
    DESCRIPTION "我的第一个嵌入式项目"
    LANGUAGES C            # 使用C语言
)

# 设置C标准（C11是嵌入式常用标准）
set(CMAKE_C_STANDARD 11)          # 使用C11标准
set(CMAKE_C_STANDARD_REQUIRED ON) # 必须使用C11
set(CMAKE_C_EXTENSIONS OFF)       # 禁用GNU扩展，保持代码可移植性

# 设置编译类型（Debug或Release）
if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Debug)   # 默认为Debug模式，便于调试
endif()

message("构建类型: ${CMAKE_BUILD_TYPE}")
message("项目版本: ${PROJECT_VERSION}")

# 设置包含目录（告诉编译器在哪里找头文件）
include_directories(
    ${CMAKE_SOURCE_DIR}/include   # 包含我们的头文件目录
)

# 设置编译选项
add_compile_options(
    -Wall          # 开启所有警告
    -Wextra        # 额外警告
    -Werror        # 将警告视为错误（严格要求）
    -g             # 包含调试信息
)

# 如果是Debug模式，添加调试选项
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
    add_compile_options(-O0)      # 关闭优化，便于调试
    message("调试模式：优化已关闭")
else()
    add_compile_options(-O2)      # Release模式开启优化
endif()

# 定义源代码文件
set(SOURCES
    src/main.c
    src/led.c
    src/pwm_led.c    # 新增
    src/button.c     # 新增  
    src/uart.c       # 新增
)

# 创建可执行文件
add_executable(${PROJECT_NAME} ${SOURCES})

# 设置输出目录（可选）
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/build)

# 安装规则（可选，用于make install）
install(TARGETS ${PROJECT_NAME} DESTINATION bin)

# 打印成功信息
message("CMake配置完成!")
message("使用 'make' 命令编译项目")

# 添加编译选项
target_compile_options(${PROJECT_NAME} PRIVATE
    -Wall
    -Wextra
    -Werror
    -g
    -DDEBUG_MODE=1   # 启用调试模式
)